package practice.unionfind;

/**
 * @Description:
 * @Author Ammar
 * @Create 2023/8/26 19:16
 */
public abstract class AbstractUnionFind {

    protected int[] parent;

    public AbstractUnionFind(int capacity) {
        parent = new int[capacity];
        for (int i = 0; i < parent.length; i++) {
            parent[i] = i;
        }
    }

    // 找到v所属集合的根
    public abstract int find(int v);

    // 将 v1 和 v2 所属集合进行合并
    public abstract void union(int v1, int v2);

    // 比较 v1 和 v2 是不是在同一个集合内
    public boolean isSame(int v1, int v2) {
        return find(v1) == find(v2);
    }

    protected void rangeCheck(int range) {
        if (range < 0 || range > parent.length - 1) throw new IllegalArgumentException("v 的 index 应在合理范围内");
    }

}
